/*
 * @Author: 姜斌
 * @Date: 2024-05-05 08:59:08
 * @LastEditTime: 2024-05-06 23:17:32
 * @LastEditors: 姜斌
 * @Description: 添加描述信息
 * @FilePath: \be_quna\app.js
 */
// const cors = require("cors"); //跨域中间件
const createError = require("http-errors");
const express = require("express");
const path = require("path");
// const jwt = require("jsonwebtoken");
// const logger = require("morgan");
// const expressJWT = require("express-jwt"); //解析token中间件
const indexRouter = require("./routes/index");
// const fileRouter = require("./routes/file");
// const usersRouter = require("./routes/users");
// const scoreRouter = require("./routes/score");
const imagesRouter = require("./routes/images");
// const listsRouter = require("./routes/lists");
// const captainRouter = require("./routes/captain");
const app = express();
// config
const config = require("./config");
// config.setLogger(process.env.MODE);
// //test data
// global.logger.info({ msg: "info" });
// global.logger.warn({ msg: "warn" });
// global.logger.error({ msg: "error" });
// console.log("global.logger", 888);
//test data
// view engine setup
app.set("views", path.join(__dirname, "views")); // 静态地址
app.set("view engine", "jade"); // 指定静态文件后缀

// app.use(logger("dev"));
app.use(config.setHttpLogger()); //日志
config.setLogger(); // 输出文件
app.use(express.json()); // json格式上传
app.use(express.urlencoded({ extended: false })); // 解析url
app.use(express.static(path.join(__dirname, "public"))); //静态css地址
app.use(express.static(path.join(__dirname, "log_box"))); //日志地址

// 跨域配置
// const corsOptions = {
//   origin: 'http://example.com', // 允许指定域名进行跨域访问
//   methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', // 允许的HTTP请求方法
//   allowedHeaders: 'Content-Type,Authorization', // 允许的请求头字段
//   credentials: true, // 是否允许带上Cookie信息
//   optionsSuccessStatus: 200 // 预检请求成功的HTTP状态码
// };

// app.use(cors(corsOptions));

// 一定要在路由之前，封装res.cc函数,统一处理返回信息问题  统一出口

// 注册将JWT字符串解析还原成JSON对象的中间件
// 注意：只要配置成功了express-jwt这个中间件，就可以把解析出来的用户信息，挂载到req.user属性上 使用requestProperty属性进行挂载
// 解析token
// app.use(
//   expressJWT
//     .expressjwt({
//       secret: process.env.SECRET_KEY,
//       algorithms: ["HS256"],
//       requestProperty: "user",
//     })
//     .unless({ path: ["/lyapi/users/login", "/api/file"] })
// );

app.use((req, res, next) => {
  // if (
  //   req.headers.authorization &&
  //   req.headers.authorization.startsWith("Bearer")
  // ) {
  //   const token = req.headers.authorization.split(" ")[1];
  //   const { id } = jwt.verify(token, process.env.SECRET_KEY);
  //   global.connectRedis.get(id).then((resGet) => {
  //     console.log("resGet", resGet);
  //     if (resGet !== token) {
  //       return res.send({
  //         code: 401,
  //         msg: "token已失效，请尝试重新登录！",
  //       });
  //     }
  //   });
  //   // 解析Redis服务上的json文件
  //   global.connectRedis.get("jsonFile").then((res) => {
  //     const jsonParse = JSON.parse(res);
  //     // console.log("json---", jsonParse);
  //   });
  // }
  // else {
  //   return res.send({
  //     code: 401,
  //     msg: "无效的token",
  //   });
  // }
  res.cc = function (err, code = 1) {
    res.send({
      code,
      message: err instanceof Error ? err.message : err,
    });
  };
  next();
});

app.use("/kpapi", indexRouter); // 日志
// app.use("/lyapi/users", usersRouter); //用户信息
// app.use("/lyapi/userinfo", scoreRouter); //分数
app.use("/kpapi/images", imagesRouter); // 图片
// app.use("/lyapi/lists", listsRouter); // 各个排行
// app.use("/lyapi/captain", captainRouter); //设置队长
// app.use("/api/file", fileRouter); // 文件路由

// 401 token时效或者不合法
app.use((err, req, res, next) => {
  //token解析失败导致
  // if (err.name === "UnauthorizedError") {
  //   return res.send({
  //     code: 401,
  //     msg: "token已过期，请尝试重新登录！",
  //   });
  // }
  res.send({ code: 500, msg: err.message });
});
// catch 404 and forward to error handler
app.use((req, res, next) => {
  next(createError(404));
});

// error handler 错误日志监听
app.use((err, req, res, next) => {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

module.exports = app;
